package com.gzz.orchid.main.facade.controller;

import org.springframework.messaging.rsocket.service.RSocketExchange;
import org.springframework.stereotype.Controller;
import reactor.core.publisher.Flux;

import java.time.Duration;

/**
 * 简单通知推送服务端
 * <p>
 * 使用 @Controller 和 @RSocketExchange 定义一个简单的服务端逻辑：
 */
@Controller // 标注类为 RSocket 控制器。
public class RSocketServerController {
    @RSocketExchange("notifications") //定义处理路径为 "notifications"，客户端通过该路径调用服务端方法
    public Flux<String> getNotifications() {
        return Flux.interval(Duration.ofSeconds(1)) // 每秒生成一个数据
                .map(seq -> "Notification #" + seq); // 返回通知内容
    }

    /**
     * 服务端处理双向通信
     * 示例：实现一个简单的聊天服务：
     *
     * @param incomingMessages
     * @return
     */
    @RSocketExchange("chat")
    public Flux<String> chat(Flux<String> incomingMessages) {
        return incomingMessages.map(msg -> "Echo: " + msg); // 回显客户端发送的消息
    }

    /**
     * 服务端推送流式数据
     * 服务端可以持续向客户端发送实时数据流，例如传感器数据或日志信息
     */
    @RSocketExchange("sensor-data")
    public Flux<Integer> streamSensorData() {
        return Flux.interval(Duration.ofSeconds(1)) // 每秒生成一个数据
                .map(seq -> (int) (Math.random() * 100)); // 模拟传感器数据
    }
}
